package com.letv.core.download.image;

import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;

import com.letv.core.download.image.ImageDownloader.BitmapConfig;

/**
 * 图片缓存
 * 
 * @author zhuqiao
 *
 */
public class BitmapCache {
    private final IMemoryCache memoryCache;// 内存
    private final DiscCache discCache;// 磁盘

    public enum CacheType {
        SOFT, LRU
    }

    public BitmapCache(Context context) {
        memoryCache = new LruMemoryCache(context);
        discCache = new DiscCache(context);
    }

    /**
     * 图片添加带内存缓存中
     * 
     * @param url
     * @param bitmap
     */
    public void addToMemoryCahce(String url, Bitmap bitmap) {
        if (!TextUtils.isEmpty(url) && bitmap != null && memoryCache != null) {
            memoryCache.put(url, bitmap);
        }
    }

    /**
     * 从内存缓存中获取bitmap
     * 
     * @param url
     */
    public Bitmap getBitmapFromMemoryCache(String url) {
        if (memoryCache != null) {
            return memoryCache.get(url);
        }
        return null;
    }

    /**
     * 从内存缓存中清除bitmap缓存
     * 
     * @param url
     */
    public void removeBitmapFromMemoryCache(String url) {
        if (!TextUtils.isEmpty(url) && memoryCache != null) {
            memoryCache.remove(url);
        }
    }

    /**
     * 清空内存缓存
     */
    public void clearMemoryCache() {
        if (memoryCache != null) {
            memoryCache.clear();
        }
    }

    public Bitmap getThumbnailFromDiscCache(String url, BitmapConfig config) {
        if (discCache != null && !TextUtils.isEmpty(url))
            return discCache.getThumbnailBitmap(url, config);
        return null;
    }

    /**
     * 从磁盘缓存中获取图片
     * 
     * @param url
     */
    public Bitmap getBitmapFromDiscCache(String url, BitmapConfig config) {
        if (discCache != null && !TextUtils.isEmpty(url))
            return discCache.getBitmapFromDisk(url, config);
        return null;
    }

    /**
     * 从网络获取图片
     * 
     * @param url
     * @param config
     * @return
     */
    public Bitmap getBitmapFromNetwork(String url, BitmapConfig config) {
        if (discCache != null && !TextUtils.isEmpty(url))
            return discCache.getBitmapFromNetwork(url, config);
        return null;
    }

    public DiscCache getDiscCache() {
        return discCache;
    }

}
